home *** CD-ROM | disk | FTP | other *** search
- //-----------------------------------------------------------------------------
- // File: D3DApp.h
- //
- // Desc: Application class for the Direct3D samples framework library.
- //
- // Copyright (c) 1998-2001 Microsoft Corporation. All rights reserved.
- //-----------------------------------------------------------------------------
- #ifndef D3DAPP_H
- #define D3DAPP_H
-
- // basetsd.h defines INT_PTR (used below). It is not included by default
- // under VC 5.0. If you are using VC6 or later, it is included via Windows.h.
- #include <basetsd.h>
-
-
- //-----------------------------------------------------------------------------
- // Error codes
- //-----------------------------------------------------------------------------
- enum APPMSGTYPE { MSG_NONE, MSGERR_APPMUSTEXIT, MSGWARN_SWITCHEDTOREF };
-
- #define D3DAPPERR_NODIRECT3D 0x82000001
- #define D3DAPPERR_NOWINDOW 0x82000002
- #define D3DAPPERR_NOCOMPATIBLEDEVICES 0x82000003
- #define D3DAPPERR_NOWINDOWABLEDEVICES 0x82000004
- #define D3DAPPERR_NOHARDWAREDEVICE 0x82000005
- #define D3DAPPERR_HALNOTCOMPATIBLE 0x82000006
- #define D3DAPPERR_NOWINDOWEDHAL 0x82000007
- #define D3DAPPERR_NODESKTOPHAL 0x82000008
- #define D3DAPPERR_NOHALTHISMODE 0x82000009
- #define D3DAPPERR_NONZEROREFCOUNT 0x8200000a
- #define D3DAPPERR_MEDIANOTFOUND 0x8200000b
- #define D3DAPPERR_RESIZEFAILED 0x8200000c
- #define D3DAPPERR_NULLREFDEVICE 0x8200000d
-
-
-
-
- //-----------------------------------------------------------------------------
- // Name: struct D3DModeInfo
- // Desc: Structure for holding information about a display mode
- //-----------------------------------------------------------------------------
- struct D3DModeInfo
- {
- DWORD Width; // Screen width in this mode
- DWORD Height; // Screen height in this mode
- D3DFORMAT Format; // Pixel format in this mode
- DWORD dwBehavior; // Hardware / Software / Mixed vertex processing
- D3DFORMAT DepthStencilFormat; // Which depth/stencil format to use with this mode
- };
-
-
-
-
- //-----------------------------------------------------------------------------
- // Name: struct D3DDeviceInfo
- // Desc: Structure for holding information about a Direct3D device, including
- // a list of modes compatible with this device
- //-----------------------------------------------------------------------------
- struct D3DDeviceInfo
- {
- // Device data
- D3DDEVTYPE DeviceType; // Reference, HAL, etc.
- D3DCAPS8 d3dCaps; // Capabilities of this device
- const TCHAR* strDesc; // Name of this device
- BOOL bCanDoWindowed; // Whether this device can work in windowed mode
-
- // Modes for this device
- DWORD dwNumModes;
- D3DModeInfo modes[150];
-
- // Current state
- DWORD dwCurrentMode;
- BOOL bWindowed;
- D3DMULTISAMPLE_TYPE MultiSampleTypeWindowed;
- D3DMULTISAMPLE_TYPE MultiSampleTypeFullscreen;
- };
-
-
-
-
- //-----------------------------------------------------------------------------
- // Name: struct D3DAdapterInfo
- // Desc: Structure for holding information about an adapter, including a list
- // of devices available on this adapter
- //-----------------------------------------------------------------------------
- struct D3DAdapterInfo
- {
- // Adapter data
- D3DADAPTER_IDENTIFIER8 d3dAdapterIdentifier;
- D3DDISPLAYMODE d3ddmDesktop; // Desktop display mode for this adapter
-
- // Devices for this adapter
- DWORD dwNumDevices;
- D3DDeviceInfo devices[5];
-
- // Current state
- DWORD dwCurrentDevice;
- };
-
-
-
-
- //-----------------------------------------------------------------------------
- // Name: class CD3DApplication
- // Desc: A base class for creating sample D3D8 applications. To create a simple
- // Direct3D application, simply derive this class into a class (such as
- // class CMyD3DApplication) and override the following functions, as
- // needed:
- // OneTimeSceneInit() - To initialize app data (alloc mem, etc.)
- // InitDeviceObjects() - To initialize the 3D scene objects
- // FrameMove() - To animate the scene
- // Render() - To render the scene
- // DeleteDeviceObjects() - To cleanup the 3D scene objects
- // FinalCleanup() - To cleanup app data (for exitting the app)
- // MsgProc() - To handle Windows messages
- //-----------------------------------------------------------------------------
- class CD3DApplication
- {
- protected:
- // Internal variables for the state of the app
- D3DAdapterInfo m_Adapters[10];
- DWORD m_dwNumAdapters;
- DWORD m_dwAdapter;
- BOOL m_bWindowed;
- BOOL m_bActive;
- BOOL m_bReady;
- BOOL m_bHasFocus;
-
- // Internal variables used for timing
- BOOL m_bFrameMoving;
- BOOL m_bSingleStep;
-
- // Internal error handling function
- HRESULT DisplayErrorMsg( HRESULT hr, DWORD dwType );
-
- // Internal functions to manage and render the 3D scene
- HRESULT BuildDeviceList();
- BOOL FindDepthStencilFormat( UINT iAdapter, D3DDEVTYPE DeviceType,
- D3DFORMAT TargetFormat, D3DFORMAT* pDepthStencilFormat );
- HRESULT Initialize3DEnvironment();
- HRESULT Resize3DEnvironment();
- HRESULT ToggleFullscreen();
- HRESULT ForceWindowed();
- HRESULT UserSelectNewDevice();
- VOID Cleanup3DEnvironment();
- HRESULT Render3DEnvironment();
- virtual HRESULT AdjustWindowForChange();
- static INT_PTR CALLBACK SelectDeviceProc( HWND hDlg, UINT msg,
- WPARAM wParam, LPARAM lParam );
-
- protected:
- // Main objects used for creating and rendering the 3D scene
- D3DPRESENT_PARAMETERS m_d3dpp; // Parameters for CreateDevice/Reset
- HWND m_hWnd; // The main app window
- HWND m_hWndFocus; // The D3D focus window (usually same as m_hWnd)
- HMENU m_hMenu; // App menu bar (stored here when fullscreen)
- LPDIRECT3D8 m_pD3D; // The main D3D object
- LPDIRECT3DDEVICE8 m_pd3dDevice; // The D3D rendering device
- D3DCAPS8 m_d3dCaps; // Caps for the device
- D3DSURFACE_DESC m_d3dsdBackBuffer; // Surface desc of the backbuffer
- DWORD m_dwCreateFlags; // Indicate sw or hw vertex processing
- DWORD m_dwWindowStyle; // Saved window style for mode switches
- RECT m_rcWindowBounds; // Saved window bounds for mode switches
- RECT m_rcWindowClient; // Saved client area size for mode switches
-
- // Variables for timing
- FLOAT m_fTime; // Current time in seconds
- FLOAT m_fElapsedTime; // Time elapsed since last frame
- FLOAT m_fFPS; // Instanteous frame rate
- TCHAR m_strDeviceStats[90];// String to hold D3D device stats
- TCHAR m_strFrameStats[90]; // String to hold frame stats
-
- // Overridable variables for the app
- TCHAR* m_strWindowTitle; // Title for the app's window
- BOOL m_bUseDepthBuffer; // Whether to autocreate depthbuffer
- DWORD m_dwMinDepthBits; // Minimum number of bits needed in depth buffer
- DWORD m_dwMinStencilBits; // Minimum number of bits needed in stencil buffer
- DWORD m_dwCreationWidth; // Width used to create window
- DWORD m_dwCreationHeight; // Height used to create window
- BOOL m_bShowCursorWhenFullscreen; // Whether to show cursor when fullscreen
- BOOL m_bClipCursorWhenFullscreen; // Whether to limit cursor pos when fullscreen
-
- // Overridable functions for the 3D scene created by the app
- virtual HRESULT ConfirmDevice(D3DCAPS8*,DWORD,D3DFORMAT) { return S_OK; }
- virtual HRESULT OneTimeSceneInit() { return S_OK; }
- virtual HRESULT InitDeviceObjects() { return S_OK; }
- virtual HRESULT RestoreDeviceObjects() { return S_OK; }
- virtual HRESULT FrameMove() { return S_OK; }
- virtual HRESULT Render() { return S_OK; }
- virtual HRESULT InvalidateDeviceObjects() { return S_OK; }
- virtual HRESULT DeleteDeviceObjects() { return S_OK; }
- virtual HRESULT FinalCleanup() { return S_OK; }
-
- public:
- // Functions to create, run, pause, and clean up the application
- virtual HRESULT Create( HINSTANCE hInstance );
- virtual INT Run();
- virtual LRESULT MsgProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam );
- virtual VOID Pause( BOOL bPause );
-
- // Internal constructor
- CD3DApplication();
- };
-
-
-
-
- #endif
-
-
-
-